<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>
Dialog Konsol BeanShell
</title>
</head>
<body bgcolor="#ffffff">
<h1>Dialog Konsol BeanShell</h1>
<h3>Pengantar/ Apa itu BeanShell</h3>
<p>
<a href="http://www.beanshell.org/">BeanShell</a> adalah shell Java interaktif yang dapat digunakan untuk mengeksekusi skrip BeanShell. Skrip ini adalah bentuk sederhana dari Java yang menggunakan berbagai elemen dari sintaks Java, tapi dalam format skrip yang lebih sederhana. Semua kode Java adalah kode BeanShell yang valid.
Integrasi BeanShell dalam OWASP ZAP memungkinkan Anda untuk menulis skrip menggunakan fungsi-fungsi ZAP dan kumpulan data. Ini akan menjadi fitur yang sangat mumpuni untuk menganalisa aplikasi web.
</p>
<h3>Konsol BeanShell</h3>
<p>
Konsol dimulai dari menu Perkakas, dan berisi layar belah di mana setengah di atas adalah konsol BeanShell interaktif dan setengah di bawah adalah penyunting teks sederhana. Untuk skrip yang rumit, Anda disarankan untuk menggunakan penyunting Java.  Skrip dapat dimuat, disimpan, dan dievaluasi dari penyunting.
</p>
<p>
Ketika BeanShell mulai maka tersedia sejumlah obyek dari ZAP untuk digunakan, yaitu:
<ul>
<li>singleton <i>Model</i>, melalui obyek bernama <b><i>model</i></b></li>
<li>pohon <i>SiteTree</i> dari situs saat ini melalui obyek <b><i>sites</i></b></li>
<li>contoh <i>HttpSender</i> melalui obyek <b><i>sender</i></b></li>
</ul>
<p>
Perhatikan bahwa BeanShell adalah jenis loosely typed. Oleh karena itu, tidak perlu untuk menyatakan variabel sebelum menggunakannya - hal ini membuat skrip sedikit lebih ringkas dari Java biasa. Tapi tentu saja, Anda diperbolehkan jika Anda tidak ingin menentukan jenisnya.
</p>
<h3>Menggunakan Peta Situs</h3>
<p>
Mari kita mulai dengan sesuatu yang berguna dan khas: Iterate melalui semua node situs dan periksa keberadaan berkas. Skrip yang sudah dibuat yang menyelesaikan skrip ini, pilih <i>Load</i> dan pilih berkas <i>example.tree.bsh</i>.
</p>
<pre>
import org.apache.commons.httpclient.URI;
import org.parosproxy.paros.network.HttpMessage;
import org.parosproxy.paros.model.*;

Pohon () {
	
	find (SiteNode node, String resource) {
		if (node == null) return;
		ref = node.getHistoryReference();
		if ((ref != null) &amp;&amp; (!node.isLeaf())) {
			checkExists(ref, resource);    
		}
		for (i=0;i&lt;node.getChildCount();i++) {   
			try {
				find (node.getChildAt(i), resource);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
	checkExists(ref, resource) {
		u = ref.getHttpMessage().getRequestHeader().getURI().toString() + "/" + 
sumber;
		msg = ref.getHttpMessage();
		msg.getRequestHeader().setURI(new URI(u));
		sender.sendAndReceive(msg, true);
		if (msg.getResponseHeader().getStatusCode() == 200) {
			print("Found: "+msg.getRequestHeader().getURI().toString());
		}
	}

	kembalikan ini;
}
</pre>
<p>
Sebelum mengeklik Evaluasi, terlebih dahulu ramban ke situs melalui ZAP untuk mengisi pohon:
</p>
<p>
Sekarang klik pada evaluasi untuk mengeksekusi skrip yang ada di penyunting. Jika tidak ada kesalahan, maka sekarang Anda dapat mulai mengunakan obyek yang ditentukan dalam skrip dengan cara menjalankan perintah-perintah ini:
</p>
<pre>
t = Tree();
</pre>
<p>
Ini akan membuat obyek Pohon baru dan menetapkan referensi ke <i>t</i>.
</p>
<pre>
t.find(sites.getRoot(), "index.html");
</pre>
<p>
Panggil metode <i>find</i> pada t, yang akan mengambil <i>SiteNode</i> sebagai argumen pertama dan sumber sebagai kedua. Dalam hal ini, metode tersebut akan iterate melalui semua node dalam pohon, karena kita mulai dari akar, dan akan menemukan berkas index.html.
</p>
<p>
Alih-alih iterasi melalui semua node, kita juga bisa memilih untuk memulai suatu node khusus dengan menggunakan metode <i>findChild</i>.
</p>
<p>
Hal ini akan memberikan Anda gambaran mengenai kemampuan BeanShell dalam ZAP. Tapi untuk memanfaatkan sepenuhnya, Anda perlu mengenal API internal dan fitur-fitur BeanShell. BeanShell telah dibuat sedemikian rupa untuk memungkinkan akses penuh terhadap semua obyek dan metode internal - bahkan yang pribadi sekalipun.
</p>
<h3>Permintaan HTTP Sederhana</h3>
<p>
Pada contoh berikut, kita membuat dan mengirim permintaan HTTP langsung di konsol interaktif:
</p>
<pre>
TBD
</pre>
<p>
Untuk menggunakan sepenuhnya kemampuan BeanShell, Anda perlu mengenal fitur-fitur ZAP. Obyek <i>sender</i> adalah contoh yang sama seperti yang digunakan oleh <a href="man_req.html">Manual Request Editor</a> dan karenanya akan otomatis menggunakan pengaturan proksi yang ditetapkan dalam konfigurasi ZAP.
</p>
<pre>
TBD
</pre>
<h3>Tips</h3>
<p>
Gunakan perintah <i>unset(String)</i> untuk menghapus variabel, metode, atau obyek yang dinyatakan. Hal ini berguna jika Anda ingin mengganti metode pernyataan dalam namespace saat ini. Perhatikan bahwa perintah menggunakan argumen String, bukan Obyek, jadi untuk menghapus obyek <i>t</i> yang kita pakai di atas, harusnya: <i>unset("t");</i> dan bukan <i>unset(t);</i>
</p>
<h2>Diakses melalui</h2>
<table>
<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
<a href="../tlmenu/tools.html">Menu Perkakas tingkat atas</a></td><td>Menu 'Konsol BeanShell'</td></tr>
</table>

<h2>Lihat juga</h2>
<table>
<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
<a href="../overview.html">Ikhtisar UI</a></td><td>untuk ikhtisar antarmuka pengguna</td></tr>
<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
<a href="dialogs.html">Dialog</a></td><td>untuk rincian dialog dan sembulan </td></tr>
</table>

</body>
</html>
